package com.kevin.util.pdf.util;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate;
import org.beetl.core.Template;
import org.beetl.core.resource.ClasspathResourceLoader;

/**
 * 模板引擎工具类
 * 
 * @author kevin
 * 
 */
public final class BeetlService {

    private BeetlService() {
        super();
    }

    /**
     * 模板路径
     */
    public static final String TEMPPATH = "/template/";
//  • StringTemplateResourceLoader：字符串模板加载器，用于加载字符串模板，如本例所示
//  • FileResourceLoader：文件模板加载器，需要一个根目录作为参数构造，，传入 getTemplate 方法的 String 是模板文件相对于 Root 目录的相对路径
//  • ClasspathResourceLoader：文件模板加载器，模板文件位于 Classpath 里
//  • WebAppResourceLoader：用于 webapp 集成，假定模板根目录就是 WebRoot 目
    public static final ClasspathResourceLoader RESOURCELOADER = new ClasspathResourceLoader();
    private static Configuration cfg = null;
    private static GroupTemplate gt = null;

    static {
        try {
            cfg = Configuration.defaultConfiguration();
            gt = new GroupTemplate(RESOURCELOADER, cfg);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 
     * @方法名 outputHtml
     * @功能描述 输出静态页面
     * @author 吕凯
     * @param rootPath
     *            项目根目录
     * @param filePath
     *            输出文件位置
     * @param tempPath
     *            模板文件位置
     * @param map
     *            传入数据
     * @return void
     * @throws TemplateException
     * @throws IOException
     * @编码时间 2013-5-2 下午01:55:34
     */
    @SuppressWarnings("rawtypes")
    public static String getStringByTempl(String tempPath, Map map) throws IOException {
        Template t = gt.getTemplate(TEMPPATH + tempPath);
        t.binding(map);
        return t.render();
    }

    /**
     * 设置共享环境变量
     * 
     * @Title setSharedVars
     * @author 吕凯
     * @date 2017年1月17日 上午8:57:39
     * @param key
     * @param value
     *            void
     */
    public static void setSharedVars(String key, Object value) {
        Map<String, Object> shared = gt.getSharedVars();
        if (shared == null) {
            shared = new HashMap<String, Object>();
        }
        shared.put(key, value);
        gt.setSharedVars(shared);
    }

    /**
     * 设置共享环境变量
     * 
     * @Title setSharedVars
     * @author 吕凯
     * @date 2017年1月17日 上午8:57:51
     * @param shared
     *            void
     */
    public static void setSharedVars(Map<String, Object> shared) {
        Map<String, Object> sharedExist = gt.getSharedVars();
        if (sharedExist == null) {
            sharedExist = new HashMap<String, Object>();
        }
        sharedExist.putAll(shared);
        gt.getSharedVars().putAll(sharedExist);
    }

    /**
     * 获取共享环境变量
     * 
     * @Title getSharedVars
     * @author 吕凯
     * @date 2017年1月17日 上午8:58:07
     * @param key
     * @return Object
     */
    public static Object getSharedVars(String key) {
        return gt.getSharedVars().get(key);
    }

}
